// 引入 axios 库，用于发送 HTTP 请求
import axios from "axios";
// 引入 antd 库的 message 组件，用于显示消息提示
// import { message } from "antd";

// 引入工具函数，用于处理请求头、配置认证、处理认证错误、处理通用错误、处理网络错误
import {
  handleChangeRequestHeader,
  handleConfigureAuth,
  handleAuthError,
  handleGeneralError,
  handleNetworkError,
} from "./tool";

// // 定义一个函数类型 Fn，该函数接收一个 FcResponse<any> 类型的参数，返回一个未知类型的值
// type Fn = (data: FcResponse<any>) => unknown;

// // 定义一个接口 IAnyObj，表示一个任意对象，索引为字符串，值为未知类型
// interface IAnyObj {
//   [index: string]: unknown;
// }

// 定义一个接口 FcResponse，表示一个响应对象，包含 errno、errmsg 和 data 三个属性
// interface FcResponse<T> {
//   errno: string;
//   errmsg: string;
//   data: T;
// }
// axios.defaults.withCredentials = true;
const request = axios.create({
  baseURL: " /api",
  timeout: 3000,

  withCredentials: true, // 允许跨域请求时携带凭证
  // headers: {
  //   "Content-Type": "application/json",
  // },
});
// 添加请求拦截器，在请求发送前处理请求配置
request.interceptors.request.use((config) => {
  // 处理请求头的配置
  // config = handleChangeRequestHeader(config);
  // 处理认证相关的配置
  config = handleConfigureAuth(config);
  // 返回处理后的配置
  return config;
});

// 添加响应拦截器，在响应返回后处理响应数据
request.interceptors.response.use(
  (response) => {
    // 如果响应状态码不是 200，则拒绝该响应
    if (response.status !== 200) return Promise.reject(response.data);
    // 处理认证错误
    handleAuthError(response.data.errno);
    // 处理通用错误
    // handleGeneralError(response.data.errno, response.data.errmsg);
    // 返回响应数据
    return response;
  },
  (err) => {
    console.log("err", err);

    // 处理网络错误
    handleNetworkError(err.response?.status);
    // 拒绝该错误响应
    return Promise.reject(err.response);
  }
);

export default request;
// 定义一个 Get 函数，用于发送 GET 请求
// export const Get = (url, params = {}, clearFn) => {
//   // 返回一个 Promise 对象
//   return new Promise((resolve) => {
//     // 发送 GET 请求，并传入 URL 和参数
//     axios
//       .get(url, { params })
//       .then((result) => {
//         // 定义一个变量 res，用于存储响应数据
//         let res;
//         // 如果 clearFn 函数存在，则调用 clearFn 函数处理响应数据
//         if (clearFn !== undefined) {
//           res = clearFn(result.data);
//           // 否则，直接将响应数据赋值给 res
//         } else {
//           res = result.data;
//         }
//         // 解析 Promise，返回 null 和处理后的响应数据
//         resolve([null, res]);
//       })
//       .catch((err) => {
//         // 解析 Promise，返回错误和 undefined
//         resolve([err, undefined]);
//       });
//   });
// };

// // 定义一个 Post 函数，用于发送 POST 请求
// export const Post = (url, data, params = {}) => {
//   // 返回一个 Promise 对象
//   return new Promise((resolve) => {
//     // 发送 POST 请求，并传入 URL、请求体和参数
//     axios
//       .post(url, data, { params })
//       .then((result) => {
//         // 解析 Promise，返回 null 和响应数据
//         resolve([null, result.data]);
//       })
//       .catch((err) => {
//         // 解析 Promise，返回错误和 undefined
//         resolve([err, undefined]);
//       });
//   });
// };
